Skip to content

fix(cli): drop the value of unsupported go test flags - #67

Merged
not-matthias merged 1 commit into
mainfrom
cod-4005-handle-unsupported-go-runner-flags-without-leaving-orphaned
Nov 2, 2026
Merged

not-matthias merged 1 commit into
mainfrom
cod-4005-handle-unsupported-go-runner-flags-without-leaving-orphaned

Conversation

@not-matthias

@not-matthias not-matthias commented Oct 29, 2026 •

Copy link
Copy Markdown
Member

TLDR: Unsupported go test flags were dropped, but their separate value became a package: go test -p 1 ./... -bench . failed with package 1 is not in std after the benchmarks ran. The parser now knows each Go flag's arity and drops the value too.

  • Go flags take 0 or 1 values, so cli.rs keeps the boolean (20) and value (47) flag lists from cmd/go (Go 1.24 to 1.27).
  • Boolean flags (-v, -race) drop only themselves; test -v fmt keeps fmt.
  • Value flags drop the next argument, even if it starts with - (-ldflags "-s -w").
  • Flags unknown to go test (custom test flags) drop the next argument unless it starts with -, like Go.
  • Unsupported flags still only warn (log::warn!); the run never fails before Go is invoked.

Review note: the flag lists need an update when Go adds go test or build flags.

Closes COD-4005

@codspeed

codspeed Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Merging this PR will degrade performance by 15.49%

3 warnings

⚠️ Walltime results may be unreliable

Some benchmarks used the Walltime instrument outside CodSpeed Macro Runners, which can make the results inconsistent.

Learn more about Macro Runners

See affected benchmarks

⚠️ Unable to measure the execution of 1 benchmark

This benchmark measured no execution time, so its result is not comparable and counts as unchanged. This usually happens when the compiler removes the code under test.

Prevent compiler optimizations

See affected benchmarks

⚠️ 1 benchmark with a significant change ran on different hardware

Its base and head results were measured on machines with a different CPU, core count or memory, so the change might not come from the code. Run base and head on the same runner type.

Learn more about Macro Runners

See affected benchmarks

❌ 1 regressed benchmark
✅ 49 untouched benchmarks
⏩ 1 skipped benchmark1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Benchmark BASE HEAD Efficiency
❌ BenchmarkFibonacciDarwin 224.2 µs 265.3 µs -15.49%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing cod-4005-handle-unsupported-go-runner-flags-without-leaving-orphaned (a8f4f19) with main (84ece6e)

Open in CodSpeed

Footnotes

  1. 1 benchmark was skipped, so the baseline result was used instead. If it was deleted from the codebase, click here and archive it to remove it from the performance reports. ↩

@not-matthias
not-matthias force-pushed the cod-4005-handle-unsupported-go-runner-flags-without-leaving-orphaned branch from 52a0d05 to 0458739 Compare October 30, 2026 18:20
@not-matthias
not-matthias marked this pull request as ready for review October 30, 2026 18:20
@not-matthias
not-matthias requested a review from lvaroqui October 30, 2026 18:21
@greptile-apps

greptile-apps Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 4/5

[Medium impact] The change affects command-line parsing across Go runner benchmark runs.

Fix unsupported flag rejection and use tracing for the added warning before merging.

Fix All in Claude CodeFindings

  1. P1 Flags change package selection ▶
  2. P2 Warning bypasses tracing ▶
Fix with agent prompt
### Issue 1
go-runner/src/cli.rs:133-139
With `test -v fmt`, the new code consumes `fmt` as a flag value and runs the default `./...` instead of the requested package. Conversely, `test -cpuprofile ./cpu.out ./...` keeps `./cpu.out` as a package, leaving the original failure unfixed.

Return `CliExit::UnknownFlag` before Go runs, as the PR description requires, rather than guessing which arguments belong to unsupported flags. Update the tests to expect rejection.

### Issue 2
go-runner/src/cli.rs:140
The new warning uses `eprintln!`, but the repository rule prohibits `println!` and `eprintln!` in Rust and requires tracing macros instead. Use `tracing::warn!` here to satisfy that requirement before merging.

```suggestion
                        tracing::warn!("ignoring value '{value}' of unsupported flag '{s}'");
```

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Summary

The PR adds a helper that guesses whether an argument is a package and skips presumed values of unsupported flags.

  • The parser keeps many unsupported flag values out of the package list.

Reviews (1) · Last reviewed commit: "fix(cli): drop the value of unsupported ..." · Reviewed by Greptile

Comment thread go-runner/src/cli.rs Resolved
Comment thread go-runner/src/cli.rs Resolved
Comment thread go-runner/src/cli.rs Resolved
@not-matthias
not-matthias force-pushed the cod-4005-handle-unsupported-go-runner-flags-without-leaving-orphaned branch from 0458739 to f865954 Compare November 2, 2026 14:28
@not-matthias not-matthias changed the title fix(cli): reject unsupported go test flags fix(cli): drop the value of unsupported go test flags Nov 2, 2026
@not-matthias
not-matthias force-pushed the cod-4005-handle-unsupported-go-runner-flags-without-leaving-orphaned branch 2 times, most recently from 0f92d26 to b28e471 Compare November 2, 2026 14:34
@not-matthias
not-matthias requested a review from lvaroqui November 2, 2026 14:35

@lvaroqui lvaroqui left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! 🎸

The parser warned about unsupported flags but dropped only the flag, so a
separate value was collected as a package. In `go test -p 1 ./... -bench .`,
`1` became a package and the run failed with `package 1 is not in std` after
the benchmarks completed.

Unsupported flags are now classified the way `go test` parses them. Go flags
take either no value (booleans such as `-v` or `-race`) or exactly one
(`-p 1`, `-p=1`), so the runner keeps both lists from cmd/go. Boolean flags
drop only themselves; value flags also drop the next argument, even when it
starts with `-` (`-ldflags "-s -w"`). Flags unknown to `go test`, such as
custom test flags, drop the next argument unless it starts with `-`, like Go
does. The run keeps going and never fails before Go is invoked.

Closes COD-4005
@not-matthias
not-matthias force-pushed the cod-4005-handle-unsupported-go-runner-flags-without-leaving-orphaned branch from b28e471 to a8f4f19 Compare November 2, 2026 17:44
@not-matthias
not-matthias merged commit c64fb9b into main Nov 2, 2026
22 of 23 checks passed
@not-matthias
not-matthias deleted the cod-4005-handle-unsupported-go-runner-flags-without-leaving-orphaned branch November 2, 2026 17:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants